#include "camara.h"

#include <cmath>

Camara::Camara(float p_x, float p_y, float p_z,
                float n_x, float n_y, float n_z) :
                                                _latitud(0),
                                                _longitud(0),
                                                _distancia(1),
                                                n_x(n_x),
                                                n_y(n_y),
                                                n_z(n_z) {  
    float norma = sqrt(p_x*p_x + p_y*p_y + p_z*p_z);
    this->p_x = p_x / norma;
    this->p_y = p_y / norma;
    this->p_z = p_z / norma;

    //  i   j   k
    //  px  py  pz
    //  nx  ny  nz
    ejeLatitud_x = p_y * n_z - p_z * n_y;
    ejeLatitud_y = - p_x * n_z + p_z * n_x;
    ejeLatitud_z = p_x * n_y - p_y * n_x;
}

void Camara::ver() const {

    assert(_distancia > 0);

    gluLookAt(p_x * _distancia, p_y * _distancia, p_z * _distancia,
                0, 0, 0, 
                n_x, n_y, n_z);
    

    // Rotacion segun la latitud
    glRotatef(-_latitud, ejeLatitud_x, ejeLatitud_y, ejeLatitud_z);

    // Rotacion segun la longitud
    glRotatef(-_longitud, n_x, n_y, n_z);
    
    // Movemos la esfera hacia la posicion final.
    glTranslatef(-_x, -_y, -_z);
}
